package net.xumf.service.master;

import net.xumf.domain.master.SystemModule;
import net.xumf.support.common.BaseService;
import net.xumf.support.model.dto.PageDTO;
import net.xumf.support.model.vo.ModuleBaseVO;
import net.xumf.support.model.vo.PageVO;
import net.xumf.support.model.vo.ZtreeVO;

import java.util.List;

public interface SystemModuleService extends BaseService<SystemModule, Integer> {

    /**
     * 分页查找
     *
     * @param pageDTO {@link PageDTO}
     * @return {@link PageVO}
     */
    PageVO getSystemModules(PageDTO pageDTO);

    /**
     * 根据父id分页查找
     *
     * @param pageDTO  {@link PageDTO}
     * @param parentId 父id
     * @return {@link PageVO}
     */
    PageVO getSystemModulesByParentIdAndPage(Integer parentId, PageDTO pageDTO);

    /**
     * 根据父id查找
     *
     * @param parentId 父id
     * @return {@link PageVO}
     */
    List<? extends ModuleBaseVO> getSystemModulesByParentId(Integer parentId);

    /**
     * 通过模块id获取模块列表
     *
     * @param moduleIdsString 以逗号隔开的moduleId字符串
     * @return {@link List<SystemModule>} 模块列表
     */
    List<SystemModule> getByModuleIdIn(String moduleIdsString);

    /**
     * 通过模块id获取模块列表
     *
     * @param moduleIdsStrings 以逗号隔开的moduleId字符串列表
     * @return {@link List<SystemModule>} 模块列表
     */
    List<SystemModule> getByModuleIdIn(List<String> moduleIdsStrings);

    /**
     * 获取当前用户所拥有的模块
     *
     * @return {@link SystemModule} 模块
     */
    List<SystemModule> getModuleOfCurrentUser();

    /**
     * 获取前端所需菜单模块结构
     *
     * @return 菜单模块结构
     */
    List<? extends ModuleBaseVO> getWebPageMenuModuleBy();

    /**
     * 获取前端所需树形模块结构
     *
     * @return 树形模块结构
     */
    List<? extends ModuleBaseVO> getWebPageTreeModuleBy();

    /**
     * 获取前端所需树形模块与角色拼接
     *
     * @return 树形模块结构
     */
    List<? extends ModuleBaseVO> getModuleAndRoleForTree();

    /**
     * 获取table所需格式的菜单
     *
     * @return 菜单模块结构
     */
    List<? extends ModuleBaseVO> getModuleForTable();

    /**
     * 根据parentId获取table所需格式的菜单
     * @param parentId 父模块Id
     * @return 菜单模块结构
     */
    List<? extends ModuleBaseVO> getModuleForTableByParentId(Integer parentId);

    /**
     * 获取角色获取权限的ztree模型
     *
     * @param roleId 角色id
     * @return {@link ZtreeVO} ztree模型
     */
    List<ZtreeVO> getZtreeVO(Integer roleId);
}